home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / intuitin / clock.1 < prev    next >
Internet Message Format  |  1989-11-13  |  18KB

  1. Path: xanth!ukma!tut.cis.ohio-state.edu!gem.mps.ohio-state.edu!wuarchive!texbell!texsun!newstop!sun!swap!page
  2. From: page%swap@Sun.COM (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i203:  clock - yet another titlebar clock
  5. Message-ID: <127777@sun.Eng.Sun.COM>
  6. Date: 13 Nov 89 02:16:22 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 505
  9. Approved: page@sun.com
  10.  
  11. Submitted-by: mcvax!inesc!jmsc@uunet.UU.NET (Miguel Casteleiro)
  12. Posting-number: Volume 89, Issue 203
  13. Archive-name: intuition/clock.1
  14.  
  15. This is a small clock program with date and free memory.
  16.  
  17. [uuencoded executable included.  ..bob]
  18.  
  19. # This is a shell archive.
  20. # Remove anything above and including the cut line.
  21. # Then run the rest of the file through 'sh'.
  22. # Unpacked files will be owned by you and have default permissions.
  23. #----cut here-----cut here-----cut here-----cut here----#
  24. #!/bin/sh
  25. # shar: SHell ARchive
  26. # Run the following text through 'sh' to create:
  27. #    clock.c
  28. #    clock.uu
  29. #    getarg.asm
  30. # This is archive 1 of a 1-part kit.
  31. # This archive created: Sun Nov 12 18:11:16 1989
  32. echo "extracting clock.c"
  33. sed 's/^X//' << \SHAR_EOF > clock.c
  34. Xecho ; /*
  35. X asm getarg.asm
  36. X lc -cwusf -v -sc=__MERGED -M -y clock.c
  37. X blink clock.o+getarg.o TO clock LIB lib:amiga.lib+lib:lc.lib DEFINE _SysBase=4 SD SC ND
  38. X quit
  39. X*/
  40. X
  41. X/*
  42. X**  This is yet another clock program I (Miguel Casteleiro) wrote a long
  43. X**  while back.
  44. X**  It's small (sort of) and opens a window where the free memory, time and
  45. X**  date are displayed.
  46. X**  It's PD all the way.
  47. X**
  48. X**  Usage:
  49. X**     [run] clock [ta] [left-edge] [top-edge]
  50. X**
  51. X**  t = total memory is displayed (instead of chip and fast memory)
  52. X**  a = am/pm time format (instead of 24 hour format)
  53. X**  left-edge = left edge of clock window on workbench
  54. X**  top-edge = top edge of clock window on workbench
  55. X** 
  56. X**  By default the clock starts with split memory (chip and fast), 24 hour
  57. X**  format and near the workbench depth gadgets (on a morerowed screen 664x256).
  58. X**
  59. X**  At every minute it pops up to the front of whatever window is hiding it and
  60. X**  for 4 seconds it displays the date.
  61. X**
  62. X**  It will work with any font, but proportional fonts have wear effects on
  63. X**  the window width.
  64. X**
  65. X**  When it starts, you don't see the depth and close gadgets, but they are
  66. X**  there, where they are suppose to be.
  67. X**
  68. X**
  69. X**  Just execute this file to compile it. You'll need Lattice C V4.0 or up.
  70. X**
  71. X**  You can reach me on USENET at ...!mcvax!inesc!jmsc
  72. X**
  73. X**  Enjoy!
  74. X*/
  75. X
  76. Xextern void getarg(void);
  77. X
  78. Xchar *argptr;
  79. Xint arglen;
  80. X
  81. X/*
  82. X**   xref _argptr
  83. X**   xref _arglen
  84. X**   xdef _getarg
  85. X**
  86. X**   section "text",code
  87. X**
  88. X**_getarg:
  89. X**   move.l a0,_argptr
  90. X**   move.l d0,_arglen
  91. X**   rts
  92. X**   end
  93. X*/
  94. X
  95. X#include <exec/types.h>
  96. X#include <exec/ports.h>
  97. X#include <exec/memory.h>
  98. X#include <exec/execbase.h>
  99. X#include <devices/timer.h>
  100. X#include <libraries/dosextens.h>
  101. X#include <intuition/intuitionbase.h>
  102. X#include <proto/exec.h>
  103. X#include <proto/dos.h>
  104. X#include <proto/intuition.h>
  105. X#include <proto/graphics.h>
  106. X
  107. X#define TOP_EDGE        0
  108. X#define RIGTH_EDGE    610
  109. X#define WAIT_TIME  250000
  110. X
  111. Xstruct NewWindow nw =
  112. X   {
  113. X   0,0,
  114. X   0,0,
  115. X   -1,-1,
  116. X   CLOSEWINDOW,
  117. X   WINDOWCLOSE | WINDOWDEPTH | WINDOWDRAG | SMART_REFRESH | NOCAREREFRESH,
  118. X   NULL,NULL,
  119. X   "(c) Miguel Casteleiro 1989  Usenet:...!mcvax!inesc!jmsc  ",
  120. X   NULL,NULL,
  121. X   -1,-1,-1,-1,
  122. X   WBENCHSCREEN
  123. X   };
  124. X
  125. Xstruct IntuiText itext = {0,1,JAM2,0,0,NULL,NULL,NULL};
  126. X
  127. Xstruct DosLibrary *DOSBase = NULL;
  128. Xstruct IntuitionBase *IntuitionBase = NULL;
  129. Xstruct GfxBase *GfxBase = NULL;
  130. Xstruct Window *Window = NULL;
  131. Xstruct timerequest Time_Req;
  132. Xstruct MsgPort *Timer_Port = NULL;
  133. X
  134. X#define E_WINDOW (1<<Window->UserPort->mp_SigBit)
  135. X#define E_TIMER  (1<<Timer_Port->mp_SigBit)
  136. X
  137. Xchar day_str[7][4] =
  138. X   {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
  139. Xchar month_str[12][4] =
  140. X   {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
  141. X
  142. Xvoid my_exit(void);
  143. Xvoid date(struct DateStamp *,short *,short *,short *);
  144. Xint sprintnum(char *,int,short,int,char);
  145. X
  146. Xchar *strcpy(char *,char *);
  147. Xchar *strcat(char *,char *);
  148. Xint strlen(char *);
  149. X
  150. Xvoid clock()
  151. X{
  152. Xregister short hours,minutes,seconds,oldminutes,old_secs;
  153. Xregister short chip_free,fast_free,old_chip,old_fast;
  154. Xshort day,month,year;
  155. Xregister ULONG mask;
  156. Xregister struct DateStamp now;
  157. Xregister struct IntuiMessage *Msg;
  158. Xchar text[50],total,am_pm;
  159. X
  160. Xgetarg();
  161. Xfor (total=am_pm=0,minutes=seconds=old_secs=-1; (arglen > 0); --arglen,++argptr)
  162. X   {
  163. X   hours = *argptr;
  164. X   if ((hours == 't') || (hours == 'T')) total = 1;
  165. X   if ((hours == 'a') || (hours == 'A')) am_pm = 1;
  166. X   if ((hours >= '0') && (hours <= '9'))
  167. X      if (old_secs == -1)
  168. X         { if (minutes == -1) minutes = 0;
  169. X           minutes *= 10; minutes += hours - '0'; }
  170. X      else
  171. X      if (old_secs == 1)
  172. X         { if (seconds == -1) seconds = 0;
  173. X           seconds *= 10; seconds += hours - '0'; }
  174. X   if (hours == ' ')
  175. X      {
  176. X      if (minutes != -1) old_secs = 1;
  177. X      if (seconds != -1) old_secs = 0;
  178. X      }
  179. X   }
  180. X
  181. Xitext.IText = text;
  182. XTime_Req.tr_node.io_Message.mn_ReplyPort = NULL;
  183. X
  184. XDOSBase = (struct DosLibrary *) OpenLibrary("dos.library",0);
  185. Xif (DOSBase == NULL) { my_exit(); return; }
  186. XIntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library",0);
  187. Xif (IntuitionBase == NULL) { my_exit(); return; }
  188. XGfxBase = (struct GfxBase *) OpenLibrary("graphics.library",0);
  189. Xif (GfxBase == NULL) { my_exit(); return; }
  190. X
  191. XTimer_Port = (struct MsgPort *) CreatePort("Timer Port",0);
  192. Xif (Timer_Port == NULL) { my_exit(); return; }
  193. X
  194. Xif (OpenDevice(TIMERNAME,UNIT_VBLANK,(struct IORequest *)&Time_Req,0) != NULL)
  195. X   { my_exit(); return; }
  196. XTime_Req.tr_node.io_Message.mn_ReplyPort = Timer_Port;
  197. XTime_Req.tr_node.io_Command = TR_ADDREQUEST;
  198. XTime_Req.tr_node.io_Flags = 0;
  199. XTime_Req.tr_node.io_Error = 0;
  200. X
  201. XSetTaskPri(FindTask(0L),25);
  202. X
  203. Xnw.Width = 38;
  204. Xif (total) nw.Width -= 11;
  205. Xif (am_pm) nw.Width += 2;
  206. Xnw.Width *= IntuitionBase->FirstScreen->RastPort.Font->tf_XSize;
  207. Xnw.Height = IntuitionBase->FirstScreen->RastPort.Font->tf_YSize + 2;
  208. X
  209. Xnw.LeftEdge = RIGTH_EDGE - nw.Width;
  210. Xnw.TopEdge = TOP_EDGE;
  211. Xif (minutes != -1) nw.LeftEdge = minutes;
  212. Xif (seconds != -1) nw.TopEdge = seconds;
  213. X
  214. XWindow = (struct Window *) OpenWindow(&nw);
  215. Xif (Window == NULL) { my_exit(); return; }
  216. X
  217. XSetAPen(Window->RPort,1);
  218. X
  219. Xfor (oldminutes=seconds=chip_free=fast_free=-1; ; )
  220. X   {
  221. X   old_secs = seconds;
  222. X   old_chip = chip_free;
  223. X   old_fast = fast_free;
  224. X
  225. X   chip_free = AvailMem(MEMF_CHIP) >> 10;
  226. X   fast_free = AvailMem(MEMF_FAST) >> 10;
  227. X   DateStamp((long *)&now);
  228. X   seconds = now.ds_Tick / TICKS_PER_SECOND;
  229. X
  230. X   if ((old_secs != seconds) || (old_chip != chip_free) || (old_fast != fast_free))
  231. X      {
  232. X      hours = now.ds_Minute / 60;
  233. X      minutes = now.ds_Minute % 60;
  234. X      if (minutes != oldminutes)
  235. X         {
  236. X         oldminutes = minutes;
  237. X         WindowToFront(Window);
  238. X         date(&now,&day,&month,&year);
  239. X         }
  240. X
  241. X      if (total)
  242. X         {
  243. X         strcpy(text," Mem:");
  244. X         sprintnum(text+strlen(text),chip_free+fast_free,10,4,(char)' ');
  245. X         strcat(text,"K ");
  246. X         }
  247. X      else
  248. X         {
  249. X         strcpy(text," Chip:");
  250. X         sprintnum(text+strlen(text),chip_free,10,3,(char)' ');
  251. X         strcat(text,"K Fast:");
  252. X         sprintnum(text+strlen(text),fast_free,10,4,(char)' ');
  253. X         strcat(text,"K ");
  254. X         }
  255. X
  256. X      if ((seconds > 0) && (seconds < 5))
  257. X         {
  258. X         if (am_pm) strcat(text," ");
  259. X         strcat(text,day_str[now.ds_Days%7]);
  260. X         sprintnum(text+strlen(text),day,10,3,(char)' ');
  261. X         strcat(text," ");
  262. X         strcat(text,month_str[month]);
  263. X         sprintnum(text+strlen(text),year,10,5,(char)' ');
  264. X         strcat(text,"  ");
  265. X         }
  266. X      else
  267. X         {
  268. X         strcat(text," Time:");
  269. X         mask = 0;
  270. X         if (am_pm)
  271. X            {
  272. X            mask = 1;
  273. X            if (hours >= 12) hours -= 12, mask = 2;
  274. X            if (hours == 0) hours = 12;
  275. X            }
  276. X         sprintnum(text+strlen(text),hours,10,2,(char)' ');
  277. X         strcat(text,":");
  278. X         sprintnum(text+strlen(text),minutes,10,2,(char)'0');
  279. X         strcat(text,":");
  280. X         sprintnum(text+strlen(text),seconds,10,2,(char)'0');
  281. X         if (mask == 0) strcat(text,"    ");
  282. X         if (mask == 1) strcat(text," am ");
  283. X         if (mask == 2) strcat(text," pm ");
  284. X         }
  285. X
  286. X      Move(Window->RPort,0,0);
  287. X      Draw(Window->RPort,Window->Width,0);
  288. X      Move(Window->RPort,0,Window->Height-1);
  289. X      Draw(Window->RPort,Window->Width,Window->Height-1);
  290. X      PrintIText(Window->RPort,&itext,1,1);
  291. X      }
  292. X
  293. X   Time_Req.tr_time.tv_secs = 0;
  294. X   Time_Req.tr_time.tv_micro = WAIT_TIME;
  295. X   SendIO(&Time_Req.tr_node);
  296. X   mask = Wait(E_WINDOW | E_TIMER);
  297. X
  298. X   if (mask & E_TIMER)
  299. X      GetMsg(Timer_Port);
  300. X
  301. X   if (mask & E_WINDOW)
  302. X      {
  303. X      for (; (Msg = (struct IntuiMessage *) GetMsg(Window->UserPort));
  304. X             ReplyMsg((struct Message *)Msg))
  305. X         if (Msg->Class == CLOSEWINDOW)
  306. X            {
  307. X            ReplyMsg((struct Message *)Msg);
  308. X            my_exit();
  309. X            return;
  310. X            }
  311. X      }
  312. X   }
  313. X}
  314. X
  315. Xvoid my_exit()
  316. X{
  317. Xif (Window) CloseWindow(Window);
  318. Xif (Time_Req.tr_node.io_Message.mn_ReplyPort)
  319. X   {
  320. X   if (!CheckIO(&Time_Req.tr_node)) AbortIO(&Time_Req.tr_node);
  321. X   CloseDevice((struct IORequest *)&Time_Req);
  322. X   }
  323. Xif (Timer_Port) DeletePort(Timer_Port);
  324. Xif (GfxBase) CloseLibrary((struct Library *)GfxBase);
  325. Xif (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
  326. Xif (DOSBase) CloseLibrary((struct Library *)DOSBase);
  327. X}
  328. X
  329. Xvoid date(dt,day,month,year)
  330. Xregister struct DateStamp *dt;
  331. Xregister short *day,*month,*year;
  332. X{
  333. Xregister short j,bis,year_r,year_rest;
  334. X
  335. X*year = dt->ds_Days / (365+365+366+365);
  336. Xyear_rest = dt->ds_Days % (365+365+366+365);
  337. X*day = year_rest % 365;
  338. Xyear_r = year_rest / 365;
  339. Xif ((year_rest == 1095) || (year_r == 4)) --year_r,*day=365;
  340. Xif (year_rest > 1095) --*day;
  341. Xif ((year_rest >= 730) && (year_rest <= 1095)) bis=1; else bis=0;
  342. X*month = 0;
  343. Xif (*day >= 31)
  344. X   {
  345. X   *day -= 31;
  346. X   ++*month;
  347. X   if (*day >= 28+bis)
  348. X      {
  349. X      *day -= (28+bis);
  350. X      ++*month;
  351. X      for (j=1; (j < 12); ++j)
  352. X         {
  353. X         if (j%2)
  354. X            if (*day >= 31) *day-=31,++*month; else break;
  355. X         else
  356. X            if (*day >= 30) *day-=30,++*month; else break;
  357. X         if (j == 5) ++j;
  358. X         }
  359. X      }
  360. X   }
  361. X++*day;
  362. X*year = 1978 + (*year<<2) + year_r;
  363. X}
  364. X
  365. Xint sprintnum(str,num,base,len,pad)
  366. Xregister char *str;
  367. Xregister int num;
  368. Xregister short base;
  369. Xint len;
  370. Xchar pad;
  371. X{
  372. Xregister int rlen;
  373. Xregister char digit;
  374. Xchar sig;
  375. X
  376. Xsig = 0;
  377. Xrlen = 0;
  378. Xif (num < 0) sig = 1,num = -num;
  379. Xif (num == 0)
  380. X   str[rlen++] = '0';
  381. Xelse
  382. X   for (; (num > 0); )
  383. X      {
  384. X      digit = num % base;
  385. X      num /= base;
  386. X      if (digit < 10) digit += '0'; else digit += '7';
  387. X      str[rlen++] = digit;
  388. X      }
  389. Xdigit = pad;
  390. Xif ((digit == '0') && sig)
  391. X   for (--len; (rlen < len); str[rlen++] = digit);
  392. Xif (sig) str[rlen++] = '-';
  393. Xfor (; (rlen < len); str[rlen++] = digit);
  394. Xstr[rlen] = '\0';
  395. X
  396. Xfor (num=0,len=rlen; (--rlen > num); ++num)
  397. X   { digit = str[num]; str[num] = str[rlen]; str[rlen] = digit; }
  398. X
  399. Xreturn(len);
  400. X}
  401. SHAR_EOF
  402. echo "extracting clock.uu"
  403. sed 's/^X//' << \SHAR_EOF > clock.uu
  404. X
  405. Xbegin 644 clock
  406. XM```#\P`````````"``````````$```,0````I@```^H```,03E7_F$CG/R))%
  407. XM^0````!.N@I^<`!R_RH!+`4;0/^A&T#_H#M!__9*K`P4;P``J"!L#!`>$`)'X
  408. XM`/\,1P!T9P8,1P!49@9P`1M`_Z$,1P!A9P8,1P!!9@8;?``!_Z`,1P`P;4H,0
  409. XM1P`Y;D0R+?_V#$'__V8<#$;__V8"?``@!G0*P<(L`"`'(`<$0``PW$!@'E-!*
  410. XM9AH,1?__9@)Z`"`%P?P`"BH`(`<@!P1``##:0`Q'`"!F%@Q&__]G!CM\``'_&
  411. XM]@Q%__]G!$)M__93K`P44JP,$&``_U1![?^B*4@+'I'(*4@,)D/L"X9P`"QXY
  412. XM``1.KOW8*4`+)DJL"R9F"&$`!F9@``9:0^P+DG``+'@`!$ZN_=@I0`LJ2JP+E
  413. XM*F8(80`&1F``!CI#[`ND<``L>``$3J[]V"E`"RY*K`LN9@AA``8F8``&&D*GA
  414. XM2&P+MDZZ"3)03RE`"S9*@&8(80`&"F``!?Y![`O"<`%#[`P8<@`L>``$3J[^?
  415. XM1$J`9PAA``7J8``%WBEL"S8,)CE\``D,-'``&4`,-AE`##>3R2QX``1.KO[:5
  416. XM+T``(")O`"!P&2QX``1.KO[4<"8Y0`KF2BW_H6<*(@`$00`+.4$*YDHM_Z!G?
  417. XM##`L"N8B`%1!.4$*YB)L"RH@:0`\(F@`B#`L"N8R*0`8)`#$P3E""N8P*0`43
  418. XM5$`Y0`KH,#P"8I!".4`*XD)L"N0,1O__9P0Y1@KB#$7__V<$.44*Y$'L"N(LS
  419. XM;`LJ3J[_-"E`"S)*K`LR9@AA``4J8``%'B!L"S(B:``R<`$L;`LN3J[^JG#_$
  420. XM*@`H!3M`__0[0/_R.T7_]CMM__3_\#MM__+_[G("+'@`!$ZN_RAR"N*@.T#_M
  421. XM]'($+'@`!$ZN_RAR"N*@.T#_\D'M_]@B""QL"R9.KO]`("W_X'(R3KH'\BH`-
  422. XM,BW_]K)%9A8R+?_PLFW_]&8,,BW_[K)M__)G``/(("W_W'(\3KH'R"X`("W_.
  423. XMW'(\3KH'O"P!N$9G)B@&(&P+,BQL"RI.KO[(2&W_Z$AM_^I(;?_L2&W_V&$`:
  424. XM!/)/[P`02BW_H6=62&P+T$AM_Z).N@>$4$](;?^B3KH'7%A/0>W_HM'`,"W_3
  425. XM]$C`,BW_\DC!T(%(>``@2'@`!$AX``HO`"\(80`&"D_O`!1(;`O62&W_HDZZP
  426. XM!S103V```(A(;`O:2&W_HDZZ!RY03TAM_Z).N@<&6$]![?^BT<`P+?_T2,!(?
  427. XM>``@2'@``TAX``HO`"\(80`%O$_O`!1(;`OB2&W_HDZZ!N903TAM_Z).N@;*W
  428. XM6$]![?^BT<`P+?_R2,!(>``@2'@`!$AX``HO`"\(80`%@$_O`!1(;`O62&W_R
  429. XMHDZZ!JI03TI%;P``U`Q%``5L``#,2BW_H&<.2&P+ZDAM_Z).N@:(4$\@+?_8\
  430. XM<@=.N@:"(`'E@$'L"SK1P"\(2&W_HDZZ!FA03TAM_Z).N@9,6$]![?^BT<`P;
  431. XM+?_L2,!(>``@2'@``TAX``HO`"\(80`%`D_O`!1(;`OJ2&W_HDZZ!BQ03S`MB
  432. XM_^I(P.6`0>P+5M'`+PA(;?^B3KH&$E!/2&W_HDZZ!?983T'M_Z+1P#`M_^A(M
  433. XMP$AX`"!(>``%2'@`"B\`+PAA``2L3^\`%$AL"^Q(;?^B3KH%UE!/8``!)$ALT
  434. XM"_!(;?^B3KH%Q%!/0JW_Y$HM_Z!G)G`!*T#_Y"`'2,`,@`````QM#@2`````[
  435. XM#"X`<`(K0/_D2D=F`GX,2&W_HDZZ!7A83T'M_Z+1P"`'2,!(>``@2'@``DAXP
  436. XM``HO`"\(80`$,$_O`!1(;`OX2&W_HDZZ!5I03TAM_Z).N@4^6$]![?^BT<`@R
  437. XM!DC`2'@`,$AX``)(>``*+P`O"&$``_9/[P`42&P+^$AM_Z).N@4@4$](;?^B+
  438. XM3KH%!%A/0>W_HM'`(`5(P$AX`#!(>``"2'@`"B\`+PAA``.\3^\`%$JM_^1F9
  439. XM#DAL"_I(;?^B3KH$X%!/#*T````!_^1F#DAL#`!(;?^B3KH$R%!/#*T````"]
  440. XM_^1F#DAL#`9(;?^B3KH$L%!/(&P+,B)H`#)P`'(`+&P++DZN_Q`@;`LR,"@`R
  441. XM"$C`+T``("!L"S(B:``R("\`('(`+&P++DZN_PH@;`LR,"@`"DC`4X`O0``@P
  442. XM(&P+,B)H`#)P`"(O`"`L;`LN3J[_$"!L"S(P*``(2,`R*``*2,%3@2]``"`OR
  443. XM00`D(&P+,B)H`#(@+P`@(B\`)"QL"RY.KO\*(FP+,B!I`#)#[`L2<`%R`2QLR
  444. XM"RI.KO\H0JP,."E\``/0D`P\0^P,&"QX``1.KOXR(FP+,B!I`%9P`!`H``]R4
  445. XM`20!X:)P`"!L"S80*``/)@'AHX2#(`(L>``$3J[^PBM`_^1P`"!L"S80*``/W
  446. XM<@'AH2`M_^3`@4J`9PP@;`LV+'@`!$ZN_HPB;`LR(&D`5G``$"@`#W(!X:$@4
  447. XM+?_DP(%*@&<`^T0B;`LR(&D`5BQX``1.KOZ,)$"T_```9P#[*@RJ```"```4%
  448. XM9@XB2BQX``1.KOZ&819@#")*+'@`!$ZN_H9@PDS?1/Q.74YU2.<``DGY````M
  449. XM`$JL"S)G#"!L"S(L;`LJ3J[_N$JL#"9G*$/L#!@L>``$3J[^+$J`9@Q#[`P86
  450. XM+'@`!$ZN_B!#[`P8+'@`!$ZN_CY*K`LV9PHO+`LV3KH"T%A/2JP++F<,(FP+U
  451. XM+BQX``1.KOYB2JP+*F<,(FP+*BQX``1.KOYB2JP+)F<,(FP+)BQX``1.KOYBT
  452. XM3-]``$YU3E7_]$CG+R!)^0`````D;0`((!(B/```!;5.N@*&(&T`%#"`(!(B<
  453. XM/```!;5.N@)T*`$@!$C`,CP!;8'!2$`@;0`,,(`@!$C`+T``&"(\```!;4ZZ_
  454. XM`DXJ``RO```$1P`89P8,10`$9@Q313`\`6T@;0`,,(`,1`1';P8@;0`,4U`,?
  455. XM1`+:;0H,1`1';@1\`6`"?`!P`"!M`!`P@"!M``PP$$C`#(`````?;0``F@2`3
  456. XM````'S"`(&T`$%)0(`9(P`:`````'"!M``PR$$C!LH!M=)*`,($@;0`04E!^5
  457. XM`0Q'``QL8B`'2,!R`DZZ`;A*@6<@(&T`##`02,`,@````!]M1`2`````'S"`T
  458. XM(&T`$%)08"`@;0`,,!!(P`R`````'FTD!(`````>,(`@;0`04E!.<2`'2,`,F
  459. XM@`````5F!%*`+@!21V"8(&T`#%)0(&T`%#`0Y4#0109`![HP@$S?!/1.74YU>
  460. XM3E7_]DCG#R!)^0`````D;0`(+BT`##PM`!)"+?_Z>@!*AVH(&WP``?_Z1(=*^
  461. XMAV86(`4O0``44H`J`"`O`!05O``P"`!@2$J';T0@!DC`+T``%"`'(B\`%$ZZ$
  462. XM`.8H`2`'(B\`%$ZZ`-HN``P$``ID!@8$`#!@!`8$`#<@!2]``!12@"H`("\`!
  463. XM%!6$"`!@N!@M`!L,!``P9B1*+?_Z9QY3K0`4NJT`%&P4(`4O0``44H`J`"`ON
  464. XM`!05A`@`8.9*+?_Z9Q0@!2]``!12@"H`("\`%!6\`"T(`+JM`!1L%"`%+T``"
  465. XM%%*`*@`@+P`4%80(`&#F0C)8`'X`*T4`%%.%(`6PAV\2&#)X`!6R6`!X`!6$/
  466. XM6`!2AV#F("T`%$S?!/!.74YU``!.^0```"1.^0```H1.^0```+I.^0````!.S
  467. XM^0```EA.^0```91.^0```G!P82AC*2!-:6=U96P@0V%S=&5L96ER;R`Q.3@Y6
  468. XM("!5<V5N970Z+BXN(6UC=F%X(6EN97-C(6IM<V,@(````````````/__```"Y
  469. XM```"``X`````````````"J@``````````/__________``$``0$`````````]
  470. XM````````````````````````````````````````4W5N`$UO;@!4=64`5V5DN
  471. XM`%1H=0!&<FD`4V%T`$IA;@!&96(`36%R`$%P<@!-87D`2G5N`$IU;`!!=6<`_
  472. XM4V5P`$]C=`!.;W8`1&5C`&1O<RYL:6)R87)Y`&EN='5I=&EO;BYL:6)R87)Y\
  473. XM`&=R87!H:6-S+FQI8G)A<GD``%1I;65R(%!O<G0``'1I;65R+F1E=FEC90``Y
  474. XM($UE;3H`2R```"!#:&EP.@``2R!&87-T.@`@`"`@```@5&EM93H``#H`("`@8
  475. XM(```(&%M(```('!M(```````````````````````````````````````````+
  476. XM`````````````````````````````````^P````%````````"OP```ED```(O
  477. XM`@``!V@````*````!P````$```J*```*E@``"H0```JB```*G```"GX```J0Y
  478. XM`````````_(```/I````IB/(```,$"/````,%$YU```@;P`$((A8D$*H``0A&
  479. XM2``(3G4``$CG/"`F+P`8%"\`'WK_+P5.N0```402`'``$`$H`'+_LH!8CV8$5
  480. XM<`!@9B\\``$``4AX`").N0```0`D0"H*4(]F#B\$3KD```%8<`!8CV!`)4,`J
  481. XM"A5"``D5?``$``A"*@`.%40`#T*G3KD```$P)4``$$J#6(]G"B\*3KD```%L1
  482. XM8`I(:@`43KD````06(\@"DS?!#Q.=2\*)&\`"$JJ``IG"B\*3KD```&`6(\5&
  483. XM?`#_``AP_R5``!1P`!`J``\O`$ZY```!6$AX`"(O"DZY```!&$_O``PD7TYU^
  484. XM```O#BQY````!$SO``,`"$ZN_SHL7TYU```O#BQY````!")O``@@+P`,3J[_$
  485. XM+BQ?3G4O#BQY````!")O``A.KO[:+%].=2\.+'D````$("\`"$ZN_K8L7TYU8
  486. XM+PXL>0````0@+P`(3J[^L"Q?3G4O#BQY````!")O``A.KOZ>+%].=2\.+'D`\
  487. XM```$(F\`"$ZN_I@L7TYU2H!J```>1(!*@6H```Q$@6$``"!$@4YU80``&$2`?
  488. XM1(%.=4J!:@``#$2!80``!D2`3G4O`DA!-`%F```B2$!(04A"-`!G```&A,$PD
  489. XM`DA`-`"$P3`"2$(R`B0?3G4O`W80#$$`@&0```;AF5%##$$(`&0```;IF5E#3
  490. XM#$$@`&0```;EF55#2D%K```&XYE30S0`YJA(0D)"YJI(0X#!-@`P`C0#2$'$3
  491. XMP9""9```"%-#T(%D_G(`,@-(0^>X2$##0"8?)!].=2!O``@B;P`$2AEF_%.)\
  492. XM$MAF_"`O``1.=2!O``@B;P`$$MAF_"`O``1.=0``(&\`!$H89OQ3B)'O``0@&
  493. XM"$YU``````/L`````@`````````(`````@````D````!````6@```#8```".N
  494. X@````Y@```&H```"@````K````,H```#R`````````_(!.
  495. X``
  496. Xend
  497. Xsize 3992
  498. SHAR_EOF
  499. echo "extracting getarg.asm"
  500. sed 's/^X//' << \SHAR_EOF > getarg.asm
  501. X   xref _argptr
  502. X   xref _arglen
  503. X   xdef _getarg
  504. X
  505. X   section "text",code
  506. X
  507. X_getarg:
  508. X   move.l a0,_argptr
  509. X   move.l d0,_arglen
  510. X   rts
  511. X   end
  512. SHAR_EOF
  513. echo "End of archive 1 (of 1)"
  514. # if you want to concatenate archives, remove anything after this line
  515. exit
  516.